/* 
 * File:   Collection.h
 * Author: igui
 *
 * Created on 29 de mayo de 2011, 01:55 AM
 */

#ifndef COLLECTION_H
#define	COLLECTION_H

#include "../interfacesCol/ICollection.h"
#include "HashTable.h"

/**
 * Una implementación simple de ICollection usando HashTable 
 */
class Collection: public ICollection
{
private:
    HashTable table;
public:
    /**
     * Agrega un elemento a la colección. Si ya existía no hace nada
     */
    void add(ICollectible *);
    
    /**
     * Borra el elemento de la colección. Si no existe no hace nada
     */
    void remove(ICollectible *);
    
    
    /*
     * Devuelve true si hay un elemento en la colección cuya dirección de memoria
     * coincide con el argumente
     */ 
    bool member(ICollectible *);
    
    /*
     * Devuelve true si size() es 0
     */
    bool isEmpty();
    
    /**
     * Devuelve el tamaño de la colección
     */
    int getSize();
    
    /*
     * Devuelve una instancia de IIterator creada con el operador new
     */
    IIterator *getIterator();
};

#endif	/* COLLECTION_H */

